package tech.waterism.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import tech.waterism.document.DPrincipleCustomDocument;
import tech.waterism.entity.*;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "预报方案索Dto")
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class FPIndexDto extends FPIndex implements Serializable {

    /**
     * 测站编号
     */
    @ApiModelProperty(value = "测站编号")
    private String pstcd;

    /**
     * 测站名称
     */
    @ApiModelProperty(value = "测站名称")
    private String pstnm;
    /**
     * 水系名称
     */
    @ApiModelProperty(value = "水系名称")
    private String hnnm;
    private String hncd;

    /**
     * 测站类型
     */
    @ApiModelProperty(value = "测站类型")
    private String sttp;

    /**
     * 预报站经度
     */
    @ApiModelProperty(value = "预报站经度")
    private Double lgtd;

    /**
     * 预报站纬度
     */
    @ApiModelProperty(value = "预报站纬度")
    private Double lttd;

    /**
     * 测站方位
     */
    @ApiModelProperty(value = "测站方位")
    private Integer stazt;

    /**
     * 预报数据
     */
    @ApiModelProperty(value = "预报数据")
    private List<ForecastDataDto> data;

    /**
     * 未整编的实测数据
     */
    @ApiModelProperty(value = "未整编的实测数据")
    private List<ForecastDataDto> dataNonOrganized;

    /**
     * 站点数据
     */
    @ApiModelProperty(value = "站点数据")
    private StDataDto stData;

    /**
     * 基流
     */
    @ApiModelProperty("基流")
    private List<Double> qBases;

    /**
     * 偏移，时段
     */
    @ApiModelProperty("偏移，时段")
    private Integer lag;

    /**
     * 是否使用最大泄量
     */
    @ApiModelProperty(value = "是否使用最大泄量")
    private Boolean notUseQoutMax;

    /**
     * 水位流量关系曲线
     */
    @ApiModelProperty(value = "水位流量关系曲线")
    private List<FCurveHq> curveHq;

    /**
     * 水库库容曲线
     */
    @ApiModelProperty(value = "水库库容曲线")
    private List<FCurveHs> curveHs;

    /**
     * 水库库容曲线错误信息
     */
    @ApiModelProperty(value = "水库库容曲线错误信息")
    private String errMsgCurveHs;

    /**
     * 水位耗水率关系曲线
     */
    @ApiModelProperty(value = "水位耗水率关系曲线")
    private List<FCurveHc> curveHc;
    /**
     * 退水曲线名称
     */
    @ApiModelProperty(value = "退水曲线名称")
    private String lnnmHr;
    /**
     * 使用退水曲线
     */
    @ApiModelProperty(value = "使用退水曲线")
    private List<FCurveHrResultDto> curveHrList;

    /**
     * 发电量
     */
    @ApiModelProperty(value = "发电量（千瓦时）")
    private Double ePower;

    /**
     * 流域代码
     */
    @ApiModelProperty(value = "流域代码")
    private Integer basincode;

    /**
     * 预报顺序
     */
    @ApiModelProperty(value = "预报顺序")
    private Integer ordnum;

    /**
     * 调度规则名称
     */
    @ApiModelProperty(value = "调度规则名称")
    private String principleClassName;

    /**
     * 调度规则id
     */
    @ApiModelProperty(value = "调度规则id")
    private String principleId;

    /**
     * 调度规则详情
     */
    @ApiModelProperty(value = "调度规则详情")
    private DPrincipleCustomDocument principleCustom;

    /**
     * 执行编码
     */
    @ApiModelProperty(value = "执行编码")
    private String recordNo;

    /**
     * 枢纽设备相关
     */
    private String hbcd;
    private DHubDefinationDto hub;
    /**
     * 枢纽分流数据
     */
    private Map<String, List<ForecastDataDto>> hubDisData;

    /**
     * 蓄滞洪区是否启用
     */
    @ApiModelProperty(value = "蓄滞洪区是否启用")
    private Boolean isUseStore;

    /**
     * 泄流设备特征
     */
    @ApiModelProperty(value = "泄流设备特征")
    private List<DSpillwaysDto> spillways;

    /**
     * 蓄滞洪区淹没关系曲线
     */
    @ApiModelProperty(value = "蓄滞洪区淹没关系曲线")
    private List<DHsh0> hsh0s;

    /**
     * 起调水位
     */
    @ApiModelProperty(value = "起调水位")
    private Double rzBeg;

    /**
     * 初始库容
     */
    @ApiModelProperty(value = "初始库容")
    private Double vBeg;

    /**
     * 初始出流
     */
    @ApiModelProperty(value = "初始出流")
    private Double qOutBeg;

    /**
     * 初始入流
     */
    @ApiModelProperty(value = "初始入流")
    private Double qInBeg;

    /**
     * 初始分洪
     */
    @ApiModelProperty(value = "初始分洪")
    private Double qDvrBeg;

    /**
     * 初始排洪
     */
    @ApiModelProperty(value = "初始排洪")
    private Double qDscBeg;

    /**
     * 分洪存在
     */
    @ApiModelProperty(value = "分洪存在")
    private Boolean qDvrIsExist;

    /**
     * 排洪存在
     */
    @ApiModelProperty(value = "排洪存在")
    private Boolean qDscIsExist;

    /**
     * 防洪特征信息
     */
    @ApiModelProperty(value = "防洪特征信息")
    private FloodCharacterDto floodCharacter;

    /**
     * 堤防信息
     */
    @ApiModelProperty(value = "堤防信息")
    private StationFfrarDto stationFfrar;

    /**
     * 剖面信息
     */
    @ApiModelProperty(value = "剖面信息")
    private RiverSectionDto riverSection;

    /**
     * 预报调度统计信息
     */
    @ApiModelProperty(value = "预报调度统计信息")
    private DispatchStatisticsDto statistics;

    /**
     * 统计信息
     */
    @ApiModelProperty(value = "统计信息")
    private StatisticsInfoDto statisticsInfo;

    /**
     * 特殊字段--新增
     */
    @ApiModelProperty(value = "特殊字段--新增")
    private List<Map<String, Object>> theFieldAdded;

    /**
     * 特殊字段--移除
     */
    @ApiModelProperty(value = "特殊字段--移除")
    private List<Map<String, Object>> theFieldRemoved;

    @ApiModelProperty(value = "更新创建人")
    private String newCreatedUser;

    /**
     * 阎王鼻子闸门规则
     */
    @ApiModelProperty(value = "阎王鼻子闸门规则")
    private Object yanwangbiziPrinciple;

    /**
     * 调度类型通用补充备注字段
     */
    @ApiModelProperty(value = "调度类型通用补充备注字段")
    private Object dispatchComments;

    /**
     * 插值类型
     * 0: 龙格库塔 （默认）
     * 1：半图解法
     */
    @ApiModelProperty(value = "插值类型")
    private Integer outFlowType;
}
